import { _decorator, Component, debug, Game, game, Node, PhysicsSystem, profiler } from 'cc';
import { clientEvent } from './framework/clientEvent';
import { constant } from './framework/constant';
import { gameManager } from './fight/gameManager';
import { storageManager } from './framework/storageManager';
import { util } from './framework/util';
import { playerData } from './framework/playerData';
import { localConfig } from './framework/localConfig';
import { sdkUtil } from './framework/sdkUtil';
import { audioManager } from './framework/audioManager';
const { ccclass, property } = _decorator;

@ccclass('main')
export class main extends Component {
    @property(Node)
    /** 加载动画 */
    public ndLoading: Node = null;

    /**
     * onEnable回调触发方式：
     * 1.当组件enabled(启用状态)从false变为true；
     * 2.所在节点的active属性从false变为true时；
     * 3.倘若节点第一次被创建且enabled(启用状态)为true，则会在onLoad之后。
     */
    onEnable() {
        // 监听隐藏界面事件，调用隐藏加载面板方法
        clientEvent.on(constant.EVENT_TYPE.HIDE_LOADING_PANEL, this._hideLoadingPanel, this);
    }

    /**
     * onDisable回调触发方式：
     * 1.当组件enabled(启用状态)从true变为false；
     * 2.所在节点的active属性从true变为false时。
     */
    onDisable() {
        // 监听隐藏界面事件，调用隐藏加载面板方法
        clientEvent.off(constant.EVENT_TYPE.HIDE_LOADING_PANEL, this._hideLoadingPanel, this);
    }

    start() {
        /** 获取本地存中的游戏帧数 */
        let frameRate = storageManager.instance.getGlobalData("frameRate");
        // 获取不到，初始化帧数
        if (typeof frameRate !== "number") {
            // 获取当前游戏帧数
            frameRate = constant.GAME_FRAME;
            // 判断是不是低端机((window as any).wx防止ts报错无属性)
            if ((window as any).wx && util.checkIsLowPhone()) {
                frameRate = 30;
            }
            // 设置本地游戏帧数
            storageManager.instance.setGlobalData("frameRate", frameRate);
        }
        // 设置游戏帧数
        game.setFrameRate(frameRate);
        // 物理系统.获取物理系统实例.设置每步模拟消耗的固定时间（以 s 为单位）
        PhysicsSystem.instance.fixedTimeStep = 1 / frameRate;

        // 是否开启debug
        let isDebugOpen = storageManager.instance.getGlobalData("debug") ?? false;
        // 根据状态开启或关闭debug
        isDebugOpen === true ? profiler.showStats() : profiler.hideStats();

        /** 打开加载面板 */
        this.ndLoading.active = true;

        // (window as any).wx防止ts报错无属性
        if ((window as any).cocosAnalytics) {
            (window as any).cocosAnalytics.init({
                appID: "605630324",              // 游戏ID
                version: '1.0.0',           // 游戏/应用版本号
                storeID: "cocosPlay",     // 分发渠道
                engine: "cocos",            // 游戏引擎
            });
        }

        // 获取用户数据
        playerData.instance.loadGlobalCache();
        // 如果没有数据 自动生成
        if (!playerData.instance.userId) {
            playerData.instance.generateRandomAccount();
            console.log("###生成随机userId", playerData.instance.userId);
        }

        // 加载本地存储数据
        playerData.instance.loadFromCache();
        // 如果没有数据 初始化数据
        if (!playerData.instance.playerInfo || !playerData.instance.playerInfo.createDate) {
            playerData.instance.createPlayerInfo();
        }

        //加载CSV相关配置
        localConfig.instance.loadConfig(() => {
            this._loadFinish();
            sdkUtil.shareGame("奔跑吧巨人", "");
        })

        // 初始化音频
        audioManager.instance.init()


        //记录离线时间
        game.on(Game.EVENT_HIDE, () => {
            if (!playerData.instance.settings) {
                playerData.instance.settings = {}
            }

            playerData.instance.settings.hideTime = Date.now();
            playerData.instance.saveAll();
            storageManager.instance.save();
        })
    }

    update(deltaTime: number) {

    }


    private _loadFinish() {
        gameManager.isFirstLoad = true;
        clientEvent.dispatchEvent(constant.EVENT_TYPE.ON_GAME_INIT);
    }

    /** 隐藏加载面板 */
    private _hideLoadingPanel() {
        /** 是否存在父节点 */
        if (this.ndLoading.parent) {
            /** 从父节点职工删除该节点 */
            this.ndLoading.removeFromParent();
        }
    }
}


